/*


自定义的UITabBarItem,方便修改badgevalue的背景图片

*/
import UIKit

class HRtabBarIten: UITabBarItem {
    //  当设置 badgeValue 的时候调用此方法
   override var badgeValue: String?{
        didSet{
            let tabBarController = valueForKey("_target") as? UITabBarController
            //   一步一步找到  badgeView  的方法
            for tabBarItem in (tabBarController!.tabBar.subviews){
                //            print(values)
                if tabBarItem .isKindOfClass(NSClassFromString("UITabBarButton")!){
                    for tabBarView in tabBarItem.subviews {
                        //                    print(values1)
                        if tabBarView.isKindOfClass(NSClassFromString("_UIBadgeView")!){
                            for badgeView in tabBarView.subviews {
                                //                            print(values2)
                                if badgeView.isKindOfClass(NSClassFromString("_UIBadgeBackground")!){
                                    //找到_UIBadgeBackground,但是是私有属性没法给他设置值,使用runTime复制
                                    var count: UInt32? = 0
                                    //  ivars 里面存的是_UIBadgeBackground里面的所有属性
                                    let ivars = class_copyIvarList(NSClassFromString("_UIBadgeBackground")!, &count!)
                                    for i in 0..<Int(count!){
                                        //  遍历所有属性,只有一个属性
                                        let ivar = ivars[i]
                                        //  获取属性的名称 类型为Int8
                                        let name = ivar_getName(ivar)
                                        //  将name转化成字符串
                                        let nameStr = String(CString: name, encoding: NSUTF8StringEncoding)
//                                        print(nameStr)
                                        //  查看 属性的类型,知道类型后才能对其赋值
                                        let ivarClass = ivar_getTypeEncoding(ivar)
                                        //  将ivarClass转化成字符串
//                                        let ivarClassStr = String(CString: ivarClass, encoding: NSUTF8StringEncoding)
//                                        print(ivarClassStr)
                                        //  判断防止赋值错误
                                        if nameStr == "_image" {
                                            //  使用KVC为私有属性赋值
                                            badgeView.setValue(UIImage(named: "main_badge"), forKey: "_image")
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
